
package formularios;

import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;
import java.io.*;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import javax.swing.JOptionPane;
/**
 *
 * @author RULBER
 */
public class conexionBD {
    
    public static Connection conexion;
    public static Statement s ;
    public static String dni_logueado;
    
    public conexionBD()
    {    
    }
    
    public static void cerrarConexion()
    {
        try{
            conexion.close();
        }
        catch(Exception error){
            
        }
    }
    
    public static void abrirConexion()
    {
        try{
            MysqlDataSource dataSource = new MysqlDataSource();
            dataSource.setUser("root");
            dataSource.setPassword("root");
            dataSource.setDatabaseName("bd_sadec");
            dataSource.setServerName("localhost");
            conexion = dataSource.getConnection();
            s = conexion.createStatement();
        }
        catch(Exception error){
            JOptionPane.showMessageDialog(null,"Error en la Conexión a la Base de Datos... Comuniquese con su administrador...","SADEC",JOptionPane.ERROR_MESSAGE);
            System.exit(0);
        }
    }
    
    
    public static void GenerarBackupMySQL(String cadena)
    {     
        try{
            Runtime runtime = Runtime.getRuntime();
            File backupFile = new File(String.valueOf(cadena)+".sadec");
            FileWriter fw = new FileWriter(backupFile);
            //Crea backup con instruccion para crear base de datos si no existe
            //Process child = runtime.exec("C:\\Archivos de programa\\MySQL\\MySQL Server 5.5\\bin\\mysqldump --opt --password=root --user=root --databases bd_sadec");
            
            //Crea backup sin instruccion para crear base de datos y selecciona solo algunas tablas o todas.
            Process child = runtime.exec("C:\\Archivos de programa\\MySQL\\MySQL Server 5.5\\bin\\mysqldump --opt --password=root --user=root bd_sadec usuario respuestas");
            InputStreamReader irs = new InputStreamReader(child.getInputStream());
            BufferedReader br = new BufferedReader(irs);
            String line;
            while( (line=br.readLine()) != null ) {
                fw.write(line + "\n");
            }
            fw.close();
            irs.close();
            br.close();
            JOptionPane.showMessageDialog(null, "Archivo generado","Verificar",JOptionPane. INFORMATION_MESSAGE);
        }catch(Exception e){
            JOptionPane.showMessageDialog(null, "Error no se genero el archivo por el siguiente motivo:\n"+e.getMessage(), "Verificar",JOptionPane.ERROR_MESSAGE);
        }
    }
    
    public static void ActualizarBackupMySQL(String cadena)
    {
        try{
            String ubicacion= String.valueOf(cadena.trim());
            Process p = Runtime.getRuntime().exec("C:\\Archivos de programa\\MySQL\\MySQL Server 5.5\\bin\\mysql -u root -proot");
            OutputStream os = p.getOutputStream();
            FileInputStream fis = new FileInputStream(ubicacion);
            byte buffer[] = new byte[1024];
            int leido = fis.read(buffer);
            while (leido > 0) {
                os.write(buffer, 0, leido);
                leido = fis.read(buffer);
            }
            os.close();
            fis.close();
            JOptionPane.showMessageDialog(null,"Base Actualizada","Verificar",JOptionPane.INFORMATION_MESSAGE);
        }catch(Exception e){
            JOptionPane.showMessageDialog(null, "Error no se actualizo la DB por el siguiente motivo:\n" + e.getMessage(), "Verificar",JOptionPane.ERROR_MESSAGE);
        }   
    }
    
    public static void eliminarRegistro(String tabla, String campo, String id)
    {
        try{
            String sql="delete from "+tabla+" where "+campo+" = "+id;
            s.executeUpdate (sql);
        }
        catch(SQLException error){
            System.out.print(error);
            JOptionPane.showMessageDialog(null,"Error al Borrar Registro","SADEC",JOptionPane.ERROR_MESSAGE);
        }
    }
    
    public static int guardarDatosUsuario(String nombre, String apell, String dni, String usuario, String prof, String coleg, String pass, int tipo)
    {
        boolean existeDNI=false;
        boolean existeUss=false; 
            try{
                String sql="select * from usuario where DNI = "+dni;
                ResultSet rs = s.executeQuery (sql);
                while(rs.next())
                {
                    existeDNI=true;
                }
                sql="select * from usuario where nombre_usuario = '"+usuario+"'";
                rs = s.executeQuery (sql);
                while(rs.next())
                {
                    existeUss=true;
                }
                if(existeDNI && tipo == 1)
                {
                    JOptionPane.showMessageDialog(null,"DNI Ingresado Existe","SADEC",JOptionPane.ERROR_MESSAGE);
                    return 1;
                }
                else
                {
                    if(existeUss && tipo == 1)
                    {
                        JOptionPane.showMessageDialog(null,"Nombre de Usuario Existe","SADEC",JOptionPane.ERROR_MESSAGE);
                        return 2;
                    }
                    else
                    {
                        if(tipo==1)
                        {
                            sql="insert into usuario (DNI,nombres,apellidos,nombre_usuario,contrasenia,profesion,colegiatura) "
                                + "values ("+dni+",'"+nombre+"','"+apell+"','"+usuario+"','"+pass+"','"+prof+"','"+coleg+"')";
                            s.executeUpdate(sql);
                            return 0;
                        }
                        else
                        {
                            sql="update usuario set nombres = '"+nombre+"', apellidos = '"+apell+"', nombre_usuario = '"
                                +usuario+"', contrasenia = '"+pass+"', profesion = '"+prof+"', colegiatura = '"+coleg+"'"
                                +" where DNI = "+dni;
                            s.executeUpdate(sql);
                            return 0;
                        }
                    }
                }
            }
            catch(SQLException error){
                System.out.print(error);
                return 3;
            }
    }
    
    public static int guardarDatosAuditado(String nombre, String direc, String ruc, String telef,String dni, int tipo)
    {
        boolean existeRUC=false;
        boolean existeAUD=false; 
            try{
                String sql="select * from auditado where RUC = "+ruc;
                ResultSet rs = s.executeQuery (sql);
                while(rs.next())
                {
                    existeRUC=true;
                }
                sql="select * from auditado where nombre = '"+nombre+"'";
                rs = s.executeQuery (sql);
                while(rs.next())
                {
                    existeAUD=true;
                }
                if(existeRUC && tipo == 1)
                {
                    JOptionPane.showMessageDialog(null,"RUC Ingresado Existe","SADEC",JOptionPane.ERROR_MESSAGE);
                    return 1;
                }
                else
                {
                    if(existeAUD && tipo == 1)
                    {
                        JOptionPane.showMessageDialog(null,"Nombre de Auditado Existe","SADEC",JOptionPane.ERROR_MESSAGE);
                        return 2;
                    }
                    else
                    {
                        if(tipo==1)
                        {
                            if(telef.equals(""))
                            {
                                sql="insert into auditado (RUC,nombre,direccion,usuario_DNI) "
                                + "values ("+ruc+",'"+nombre+"','"+direc+"',"+dni+")";
                            }
                            else
                            {
                                sql="insert into auditado (RUC,nombre,direccion,telefono,usuario_DNI) "
                                + "values ("+ruc+",'"+nombre+"','"+direc+"',"+telef+","+dni+")";
                            }
                            s.executeUpdate(sql);
                            return 0;
                        }
                        else
                        {
                            if(telef.equals(""))
                            {
                                sql="update auditado set nombre = '"+nombre+"', direccion = '"+direc
                                +"' where RUC = "+ruc;
                            }
                            else
                            {
                                sql="update auditado set nombre = '"+nombre+"', direccion = '"+direc+"', telefono = "
                                +telef+" where RUC = "+ruc;
                            }
                            s.executeUpdate(sql);
                            return 0;
                        }
                    }
                }
            }
            catch(SQLException error){
                System.out.print(error);
                return 3;
            }
    }
    
    public static int guardarDatosLeyNorma(String id,String nombre, String fecha, String vigente,String descripcion, int tipo)
    {
        boolean existeLN=false; 
            try{
                String sql="select * from leyes where nombre = '"+nombre+"'";
                ResultSet rs = s.executeQuery (sql);
                while(rs.next())
                {
                    existeLN=true;
                }
                if(existeLN && tipo == 1)
                {
                    JOptionPane.showMessageDialog(null,"Nombre de Norma y/o Ley Existe","SADEC",JOptionPane.ERROR_MESSAGE);
                    return 1;
                }
                else
                {
                    if(tipo==1)
                    {
                        sql="insert into leyes (nombre,fecha_publicacion,vigente,descripcion) "
                        + "values ('"+nombre+"','"+fecha+"','"+vigente+"','"+descripcion+"')";
                        s.executeUpdate(sql);
                        return 0;
                    }
                    else
                    {
                        sql="update leyes set nombre = '"+nombre+"', fecha_publicacion = '"+fecha+"', vigente = '"
                        +vigente+"', descripcion = '"+descripcion+"' where idleyes = "+id;
                        s.executeUpdate(sql);
                        return 0;
                    }
                }
            }
            catch(SQLException error){
                return 2;
            }
    }
}
